package com.charging.dao;

import com.charging.entity.PaymentRecord;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

@Mapper
public interface PaymentRecordDao {
    /**
     * 插入支付记录
     * @param record 支付记录实体
     * @return 影响的行数
     */
    int insert(PaymentRecord record);

    /**
     * 根据ID查询支付记录
     * @param id 支付记录ID
     * @return 支付记录实体
     */
    PaymentRecord selectById(Long id);

    /**
     * 根据用户ID查询支付记录列表
     * @param userId 用户ID
     * @return 支付记录列表
     */
    List<PaymentRecord> selectByUserId(Long userId);

    /**
     * 根据订单编号查询支付记录
     * @param orderNo 订单编号
     * @return 支付记录实体
     */
    PaymentRecord selectByOrderNo(String orderNo);

    /**
     * 查询用户最后一次充值记录
     * @param userId 用户ID
     * @return 最后一次充值记录
     */
    PaymentRecord selectLastRecharge(@Param("userId") Long userId);

    /**
     * 统计用户累计充值金额
     * @param userId 用户ID
     * @return 累计充值金额
     */
    Double sumRechargeAmount(@Param("userId") Long userId);

    /**
     * 更新支付记录状态
     * @param id 支付记录ID
     * @param status 新状态
     * @param paymentTime 支付时间
     * @param transactionId 交易号
     * @return 影响的行数
     */
    int updateStatus(@Param("id") Long id,
                     @Param("status") String status,
                     @Param("paymentTime") Date paymentTime,
                     @Param("transactionId") String transactionId);

    /**
     * 根据充电记录ID查询支付记录
     * @param recordId 充电记录ID
     * @return 支付记录实体
     */
    PaymentRecord selectByRecordId(Long recordId);
}